﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MSH.Common.Classes;
using MSH.Common.DAO;
using Iesi.Collections;

namespace MSH.Common.Business
{
    /// <summary>
    /// Business object voor een sessie van een ingelogde gebruiker
    /// </summary>
    public class UserSession
    {
        private Int32 _id;
        private String _token;
        private String _username;
        private MobilePhoneTypeEnum _mobilePhoneType;
        private DateTime? _expirationTimestamp;
        private DateTime? _lastLocationUpdate;
        private bool _locationUpdateRequested;
        private ISet _personsNearby = new HashedSet();
        private String _wp7PushNotifactionURL;

        /// <summary>
        /// Database id
        /// </summary>
        public virtual Int32 ID
        {
            get { return _id; }
            set { _id = value; }
        }

        /// <summary>
        /// Gebruikersnaam
        /// </summary>
        public virtual String Username
        {
            get { return _username; }
            set { _username = value; }
        }

        /// <summary>
        /// Uniek token
        /// </summary>
        public virtual String Token
        {
            get { return _token; }
            set { _token = value; }
        }

        /// <summary>
        /// Type mobiele telefoon
        /// </summary>
        public virtual MobilePhoneTypeEnum MobilePhoneType
        {
            get { return _mobilePhoneType; }
            set { _mobilePhoneType = value; }
        }

        /// <summary>
        /// Tijd waarop de sessie verloopt
        /// </summary>
        public virtual DateTime? ExpirationTimestamp
        {
            get { return _expirationTimestamp; }
            set { _expirationTimestamp = value; }
        }

        /// <summary>
        /// Datum en tijd van de laatste locatie update
        /// </summary>
        public virtual DateTime? LastLocationUpdate
        {
            get { return _lastLocationUpdate; }
            set { _lastLocationUpdate = value; }
        }

        /// <summary>
        /// Boolean of er al een aanvraag verstuurd is voor een update van de locatie
        /// </summary>
        public virtual bool LocationUpdateRequested
        {
            get { return _locationUpdateRequested; }
            set { _locationUpdateRequested = value; }
        }

        /// <summary>
        /// Lijst met gebruikers die in de buurt waren
        /// </summary>
        public virtual ISet PersonNearby
        {
            get { return _personsNearby; }
            set { _personsNearby = value; }
        }

        /// <summary>
        /// WP7 notificatie URL
        /// </summary>
        public virtual String WP7PushNotifactionURL
        {
            get { return _wp7PushNotifactionURL; }
            set { _wp7PushNotifactionURL = value; }
        }
    }
}
